//
//  main.c
//  逻辑运算符和关系运算符
//
//  Created by ws on 2017/7/14.
//  Copyright © 2017年 王松. All rights reserved.
//

#include <stdio.h>

/**
关系运算符
 所有的关系运算符都是用来比较数据的,他们的结果只有两个要么是真(1)要么是假(0)
 > 
 <
 >=
 <=
 上面四个比较(关系)运算符的优先级大于下面两个的
 !=
 ==
 
 赋值运算符的优先级 < 比较运算符的优先级 < 算数运算符的优先级
 比较(关系)运算符的结合性:从左往右的
 */
/**
 基本使用
 */
void test1(){
    int result = 1.5 > 1.6;//结果只有0(假)和1(真)
    result = 5 >= 6;
    printf("%d\n",result);
}
/**
 比较(关系)运算符的结合性是从左往右的
 当我们不确定某些运算的优先级的时候可以使用小括号()来明确优先级
 */
void test(){
    //比较(关系)运算符的结合性是从左往右的
    int result = 5 > 6 < 4 < 3;
    // < 的优先级大于 == 的优先级
    //当我们不确定某些运算的优先级的时候可以使用小括号()来明确优先级
    result = 5 == 5 < 4;
    printf("%d\n",result);
}

/**
 逻辑运算符:所有的逻辑运算符他们的结果只有两个要么是真(1)要么是假(0)
 && 逻辑与: 
   1.只要有一个表达式为假的,那么整个表达式都是假的
   2.若果左边的表达式为假那么右边的表达式就不参与运算啦
   3.结合方向:从左往右
   4.口诀:一假则假
 
 
 || 逻辑或:
 1.只要有一个表达式为真的,那么整个表达式都是真的
 2.如果前面的表达式为真,那么后面的就不参加运算啦
 3.结合方向:从左往右
 4.口诀:一真则真
 && 和 || 的优先级小于关系优先级的运算符,但是大于赋值运算符的优先级
 
 
 !  逻辑非
 1.真变假,假变真
 2.结合方向:从右往左进行结合
 3.逻辑非的优先级高于比较(关系)运算符的和算数运算符的优先级
 */
/**
 逻辑与
 */
void WSTest1(){
    double height1 = 1.6;
    double height2 = 1.7;
    double height3 = 1.4;
    
    int result = height1 < height2 && height3 < height2;
    printf("%d\n",result);
}
/**
 在c语言中所有的数值都有真假性,所有的非零的数都是真,只有0为假
 */
void WSTest2(){
    //在c语言中所有的数值都有真假性,所有的非零的数都是真,只有0为假
    
    int result = 1 && 2;
    printf("%d\n",result);
}
/**
 若果左边的表达式为假那么右边的表达式就不参与运算啦
 */
void WSTest3(){

    int a = 1;
    int result = --a && a++;
    printf("%d\n a = %d\n",result ,a);//结果: 0 , a = 0
}

/**
 逻辑或
 */
void WSTest4(){
    
    int a = 1;
    int result = --a && a++;
    printf("%d\n a = %d\n",result ,a);//结果: 0 , a = 0
}

/**
 1.&& 的优先级大于 || 的优先级
 2.在计算机中优先级高的不一定先计算,只是先结合
 */
void WSTest5(){
    int result = 1 || 0;
    int a = 10;
    int b = 12;
    // && 的优先级大于 || 的优先级  在计算机中优先级高的不一定先计算,只是先结合
    result = a > b || b > a || 0 && 0;
    printf("%d\n",result);
}
/**
 逻辑非
 */
void testAA1(){
    
    
}
int main(int argc, const char * argv[]) {
    int result = !!1 ;

    printf("%d\n",result);
    return 0;
}
